Package org.python.pydev.editor.actions

Source Code of org.python.pydev.editor.actions.PyOpenAction

/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
/*
* Author: atotic
* Created on Apr 12, 2004
*/
package org.python.pydev.editor.actions;

import java.io.File;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.texteditor.ITextEditor;
import org.python.pydev.core.log.Log;
import org.python.pydev.editor.PyEdit;
import org.python.pydev.editor.model.ItemPointer;
import org.python.pydev.editor.model.Location;
import org.python.pydev.editorinput.PyOpenEditor;

import com.aptana.shared_core.io.FileUtils;

/**
* Opens an editor and selects text in it.
*
* Inspired by org.eclipse.jdt.ui.actions.OpenAction, but simplifies all handling in a single class.
*/
public class PyOpenAction extends Action {

    public IEditorPart editor;

    public PyOpenAction() {
    }

    public void showInEditor(ITextEditor textEdit, Location start, Location end) {
        try {
            IDocument doc = textEdit.getDocumentProvider().getDocument(textEdit.getEditorInput());
            int s = start.toOffset(doc);
            int e = end == null ? s : end.toOffset(doc);
            TextSelection sel = new TextSelection(s, e - s);
            textEdit.getSelectionProvider().setSelection(sel);
        } catch (BadLocationException e1) {
            if (textEdit instanceof PyEdit) {
                PyEdit p = (PyEdit) textEdit;
                Log.log(IStatus.ERROR, ("Error setting selection:" + start + " - " + end + " - " + p.getEditorFile()),
                        e1);

            } else {
                Log.log(IStatus.ERROR, ("Error setting selection:" + start + " - " + end), e1);
            }
        }
    }

    public void run(ItemPointer p) {
        editor = null;
        Object file = p.file;
        String zipFilePath = p.zipFilePath;

        if (zipFilePath != null) {
            //currently, only open zip file
            editor = PyOpenEditor.doOpenEditor((File) file, zipFilePath);

        } else if (file instanceof IFile) {
            IFile f = (IFile) file;
            editor = PyOpenEditor.doOpenEditor(f);

        } else if (file instanceof IPath) {
            IPath path = (IPath) file;
            editor = PyOpenEditor.doOpenEditor(path);

        } else if (file instanceof File) {
            String absPath = FileUtils.getFileAbsolutePath((File) file);
            IPath path = Path.fromOSString(absPath);
            editor = PyOpenEditor.doOpenEditor(path);
        }

        if (editor instanceof ITextEditor && p.start.line >= 0) {
            showInEditor((ITextEditor) editor, p.start, p.end);
        }
    }
}
TOP

Related Classes of org.python.pydev.editor.actions.PyOpenAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.